#include "system/commandline.h"

namespace dw {
	namespace system {

void CommandLine::RegisterOption(const std::string& name, bool defaultValue /* = false */)
{
	RegisterParameter(name, defaultValue);
}

void CommandLine::Parse(int argc, char** argv)
{
	for (int parameterIt = 1; parameterIt < argc; ++parameterIt)
	{
		std::string parameter(argv[parameterIt]);

		std::transform(parameter.begin(), parameter.end(), parameter.begin(), ::toupper);

		for (ParameterCollection::iterator paramIt = _parameters.begin(); paramIt != _parameters.end(); ++paramIt)
		{
			std::string token = "/" + paramIt->first;

			if (token.compare(0, token.size(), parameter, 0, token.size()) == 0)
			{
				dwAssert(token.size() == parameter.size() || parameter[token.size()] == ':', "Invalid parameter");

				std::string value = "";

				if (parameter.size() > token.size())
				{
					value = parameter.substr(token.size() + 1, parameter.size() - token.size());
				}
				else
				{
					value = "true";
				}

				paramIt->second->SetValueFromString(value);
			}
		}
	}
}

	} // namespace system
} // namespace dw
